include conf.mk

.PHONY:all dirs clean help

DIRS=\
$(S_DIR) \
$(CPP_DIR) \
$(OBJ_DIR) \
$(BIN_DIR)

OBJS=\
$(OBJ_DIR)/client.o \
$(OBJ_DIR)/objs.o \
$(OBJ_DIR)/callbacks.o \
$(OBJ_DIR)/wl_display.o \
$(OBJ_DIR)/wl_callback.o \
$(OBJ_DIR)/wl_registry.o \
$(OBJ_DIR)/wl_shm.o \
$(OBJ_DIR)/wl_shm_pool.o \
$(OBJ_DIR)/wl_shm_pool_buffer.o \
$(OBJ_DIR)/display.o \
$(OBJ_DIR)/registry.o \
$(OBJ_DIR)/shm.o \
$(OBJ_DIR)/fake_shm_pool.o \
$(OBJ_DIR)/args_env.o \
$(OBJ_DIR)/vsprintf.o \
$(OBJ_DIR)/mem.o \
$(OBJ_DIR)/string.o

BINS=\
$(BIN_DIR)/client

#*******************************************************************************
help:
	@echo "targets are 'all', 'help'(this output), 'clean'"
	@echo -e "you can configure the build with the following variables:\\n\
	SYSROOT, ARCH, CPP, CC, LD, CPPFLAGS, CFLAGS, LDFLAGS...\\n\
	(you can tune the conf.mk file)"

all:dirs ../ulinux/arch $(BINS)

dirs:$(DIRS)
$(DIRS):
	-mkdir -p $@

../ulinux/arch:
	ln -s archs/$(ARCH) ../ulinux/arch

clean:
	-rm -f ../ulinux/arch
	-rm -Rf $(BUILD_DIR)
#*******************************************************************************

#*******************************************************************************
#ulinux objects
$(OBJ_DIR)/args_env.o:../ulinux/arch/args_env.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/vsprintf.c:../ulinux/utils/ascii/string/vsprintf.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/vsprintf.s:$(CPP_DIR)/vsprintf.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/vsprintf.o:$(S_DIR)/vsprintf.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/mem.c:../ulinux/utils/mem.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/mem.s:$(CPP_DIR)/mem.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/mem.o:$(S_DIR)/mem.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/string.c:../ulinux/utils/ascii/string/string.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/string.s:$(CPP_DIR)/string.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/string.o:$(S_DIR)/string.s
	$(AS) $(ASFLAGS) $< -o $@
#*******************************************************************************

$(CPP_DIR)/client.c:client.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/client.s:$(CPP_DIR)/client.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/client.o:$(S_DIR)/client.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/objs.c:objs.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/objs.s:$(CPP_DIR)/objs.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/objs.o:$(S_DIR)/objs.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/wl_display.c:wire/wl_display.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/wl_display.s:$(CPP_DIR)/wl_display.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/wl_display.o:$(S_DIR)/wl_display.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/wl_callback.c:wire/wl_callback.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/wl_callback.s:$(CPP_DIR)/wl_callback.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/wl_callback.o:$(S_DIR)/wl_callback.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/wl_registry.c:wire/wl_registry.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/wl_registry.s:$(CPP_DIR)/wl_registry.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/wl_registry.o:$(S_DIR)/wl_registry.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/wl_shm.c:wire/wl_shm.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/wl_shm.s:$(CPP_DIR)/wl_shm.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/wl_shm.o:$(S_DIR)/wl_shm.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/wl_shm_pool.c:wire/wl_shm_pool.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/wl_shm_pool.s:$(CPP_DIR)/wl_shm_pool.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/wl_shm_pool.o:$(S_DIR)/wl_shm_pool.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/wl_shm_pool_buffer.c:wire/wl_shm_pool_buffer.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/wl_shm_pool_buffer.s:$(CPP_DIR)/wl_shm_pool_buffer.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/wl_shm_pool_buffer.o:$(S_DIR)/wl_shm_pool_buffer.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/display.c:srv/display.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/display.s:$(CPP_DIR)/display.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/display.o:$(S_DIR)/display.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/registry.c:srv/registry.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/registry.s:$(CPP_DIR)/registry.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/registry.o:$(S_DIR)/registry.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/shm.c:srv/shm.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/shm.s:$(CPP_DIR)/shm.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/shm.o:$(S_DIR)/shm.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/fake_shm_pool.c:fake_shm_pool.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/fake_shm_pool.s:$(CPP_DIR)/fake_shm_pool.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/fake_shm_pool.o:$(S_DIR)/fake_shm_pool.s
	$(AS) $(ASFLAGS) $< -o $@

$(CPP_DIR)/callbacks.c:callbacks.c
	$(CPP) $(CPPFLAGS) $< -o $@
$(S_DIR)/callbacks.s:$(CPP_DIR)/callbacks.c
	$(CC) $(CFLAGS) $< -o $@
$(OBJ_DIR)/callbacks.o:$(S_DIR)/callbacks.s
	$(AS) $(ASFLAGS) $< -o $@

$(BIN_DIR)/client:$(OBJS)
	$(LD) $(LDFLAGS) $(OBJS) -o $@
